// app/controller/users.js
const Controller = require('egg').Controller;

function toInt(str) {
  if (typeof str === 'number') return str;
  if (!str) return str;
  return parseInt(str, 10) || 0;
}

class UserController extends Controller {
  // 获取用户列表
  async index() {
    const ctx = this.ctx;
    const query = {
      limit: toInt(ctx.query.limit),
      offset: toInt(ctx.query.offset),
    };
    ctx.body = await ctx.model.User.findAll(query);
  }

  // 根据id获取用户信息
  async show() {
    const ctx = this.ctx;
    ctx.body = await ctx.model.User.findByPk(toInt(ctx.params.id));
  }
  // 创建新用户
  async create() {
    const ctx = this.ctx;
    const { token } = ctx.query;
    const { name, age, pwd, id } = ctx.request.body;
    const obj = { name, age, pwd, id };
    // 小B通过A分享的页码，注册成功。小B成为小A的下线 。
    // 如：https://localhost//register?token=xxxx，xxxx 为分享者id。
    // 小A分享注册页面可能为https://localhost//register?token=a_id.
    // 小B进入小A的分享页面，注册时提交注册表单需要将分享者ID(a_id)提交到后台。
    // 这时后台可以确认小B的上级是某个id。
    // 在三级分销的用户表设计时，数据库中用户信息表只要增加一栏记录上级ID即可。
    if (token) {
      obj.pid = token;
    }
    const user = await ctx.model.User.create(obj);

    // 给用户分配余额
    await ctx.model.Bill.create({ user_id: user.id });

    ctx.status = 201;
    ctx.body = user;
  }
  // 更新用户
  async update() {
    const ctx = this.ctx;
    const id = toInt(ctx.params.id);
    const user = await ctx.model.User.findByPk(id);
    if (!user) {
      ctx.status = 404;
      return;
    }

    const { name, age } = ctx.request.body;
    await user.update({ name, age });
    ctx.body = user;
  }

  // 删除用户根据id
  async destroy() {
    const ctx = this.ctx;
    const id = toInt(ctx.params.id);
    const user = await ctx.model.User.findByPk(id);
    if (!user) {
      ctx.status = 404;
      return;
    }

    await user.destroy();
    ctx.status = 200;
  }
}

module.exports = UserController;
